Тема этой статьи может сперва показаться странной: действительно, ведь основным (я бы сказал ежедневным) занятием веб-мастера является увеличение трафика, а в данном материале рассмотрен вопрос, как ограничить доступ к вашим страницам, т.е. уменьшить этот самый трафик. Однако, исходя из своего личного опыта, хочу сказать, что очень часто это бывает необходимо.
Представим себе, что вы создали какой-нибудь интерактивный интернет-сервис (онлайн тест, обучалку, игру и т.д. и т.п.), причем за свою работу, как любой нормальный человек, хотите получить деньги. Для этого нужно сделать элементарную защиту, чтобы пользователь, который не знает логина и пароля, не мог воспользоваться результатом вашего труда (а на продаже этих самых логинов и паролей вы и заработаете деньги).
Или еще один пример: у вас есть важный документ, который вам очень часто необходим - загружаете его к себе на сайт, и он будет доступен вам всегда и везде, где есть интернет. Теперь осталось защитить его от посторонних глаз и все.
Наконец, с причинами разобрались, остался еще один вопрос.
Тут возникают три различных варианта, давайте их обсудим.
- Вариант первый - использование cgi-программ. Чем этот вариант плох, так это тем, что не все хостинги (а в особенности бесплатные) предоставляют такую возможность, к тому же написание таких программ дело очень сложное или дорогое - кому как.
- Вариант второй - использование PHP, SSI и прочих им подобных. Опять таки, не все хостинги поддерживают такую возможность, хотя написание на них программы (скрипта, сценария) не составляет больших трудностей.
- Вариант третий и последний - использование JavaScript. Не требуется никаких поддержек со стороны сервера, т.к. все выполняет сам браузер, к тому же язык JavaScript очень легок в использовании, хотя и ограничен в возможностях. Здесь я сознательно не упоминаю VBScript, т.к. он менее распространен и не обладает теми средствами, которые доступны в JavaScript.
Для начала вы мысленно, а я письменно, давайте представим механизм нашей многопользовательской защиты.
Пусть в папке находятся страница с формой запроса логина и пароля, страницы с именами "логин"+"пароль".htm (для каждого пользователя своя) и "секретная" страница.
Идея довольно проста - пользователь вводит логин и пароль, сценарий JavaScript загружает страницу "логин"+"пароль".htm, которая в свою очередь автоматически заменяется "секретной" страницей.
Это все произойдет, если пользователь укажет правильный логин и пароль. А если нет? Произойдет попытка открыть несуществующий файл "логин"+"пароль".htm, что вызовет сообщение об ошибке "404 Not Found". Это не столь ужасно, однако пользователь не будет знать, то ли это он ошибся при вводе, то ли это проблема работы сервера. Также есть вероятность того, что файл с именем "логин"+"пароль".htm реально существует, однако никак не связан с "секретной" страницей, тогда загрузка этой страницы в браузер может вызвать у пользователя замешательство.
Из-за соображений безопасности язык JavaScript лишен каких бы-то ни было функций для работы с файлами, поэтому узнать, существует файл "логин"+"пароль".htm либо нет, нам не удастся. Однако из этого вовсе не следует, что нам придется смириться с таким положением вещей - мы применим одну хитрость!
Хитрость заключается в том, что у объекта img (изображение) есть событие Error, которое возникает, когда происходит попытка загрузить несуществующую картинку. Этим то мы и воспользуемся - создадим для каждого файла "логин"+"пароль".htm свою картинку "логин"+"пароль".gif и, перед тем как загрузить страницу, будем загружать соответствующий ему файл изображения. Если при этом возникнет событие Error (т.е. картинки попросту нет), то загружать страницу мы не будем, а выдадим сообщение об ошибке. Реализовав эту систему, мы получим возможность лишать пользователя доступа к странице, просто удалив необходимое изображение.
Аналогичную защиту необходимо внедрить и в саму "секретную" страницу, чтобы нельзя было получить к ней доступ, введя ее имя в адресной строке. Для этого мы будем передавать ей параметр - строку "логин"+"пароль", если этот параметр окажется неверен, то пользователь автоматически перейдет на страницу с формой запроса.
Ну вот, с теорией вроде бы разобрались, пора двигаться дальше.
Ниже приведены три листинга: для личной страницы пользователя, "секретной" страницы и страницы с формой запроса логина и пароля. Все они сопровождаются подробными комментариями, так что с пониманием проблем возникнуть не должно.
Тексты личных страниц пользователей имеют одинаковую структуру (см. листинг ниже), отличаются они только именами (для начала создайте хотя бы два таких файла с именами login1password1.htm и login2password2.htm).